# 数字(Number)类型
# python中数字有四种类型：整数、布尔型、浮点数和复数。
# int(整数), 如 1, 只有一种整数类型 int，表示为长整型，没有 python2 中的 Long。
# bool(布尔), 如 True。
# float(浮点数), 如 1.23、3E-2
# complex(复数), 如 1 + 2j、 1.1 + 2.2j
import random
import math  # -----------math函数----------

num1 = 1
print(type(num1), num1)  # <class 'int'> 1
num2 = True  # True相当于1,bool也属于Number
print(type(num2), num2)  # <class 'bool'> True
num2 = False  # False相当于0,bool也属于Number
print(type(num2), num2)  # <class 'bool'> False
num3 = True + 0.1  # 1.1
print(type(num3), num3)  # <class 'float'> 1.1
num4 = 1+2.2j  # complex类型
print(type(num4), num4)  # <class 'complex'> (1+2.2j)

# Python 数字数据类型用于存储数值。
# 数据类型是不允许改变的, 这就意味着如果改变数字数据类型的值，将重新分配内存空间。

"-----------Number（数字）----------"
# 内置的 type() 函数可以用来查询变量所指的对象类型。
a, b, c, d = 20, 5.5, True, 4+3j
print(type(a), type(b), type(c), type(d))
# <class 'int' > <class 'float' > <class 'bool' > <class 'complex' >
# 此外还可以用 isinstance 来判断：
print(isinstance(a, int))  # True
# 当你指定一个值时，Number 对象就会被创建：
var1 = 1
var2 = 10
# 您也可以使用del语句删除一些对象引用。
# del语句的语法是：
# 您可以通过使用del语句删除单个或多个对象。例如：
del var1, var2

"----------数值运算-------"
print(5 + 4)  # 加法
# 9
print(4.3 - 2)  # 减法
# 2.3
print(3 * 7)  # 乘法
# 21
print(2 / 4)  # 除法，得到一个浮点数
# 0.5
print(2 // 4)  # 除法，得到一个整数
# 0
print(17 % 3)  # 取余
# 2
print(2 ** 5)  # 乘方
# 32
x, y = 0.5, 1
"-----------math函数----------"
# abs(x)	返回数字的绝对值，如abs(-10) 返回 10
# ceil(x)	返回数字的上入整数，如math.ceil(4.1) 返回 5
# cmp(x, y) # 如果 x < y 返回 - 1, 如果 x == y 返回 0, 如果 x > y 返回 1。 Python 3 已废弃，使用(x > y)-(x < y) 替换。
# exp(x)	返回e的x次幂(ex), 如math.exp(1) 返回2.718281828459045
# fabs(x)	返回数字的绝对值，如math.fabs(-10) 返回10.0
# floor(x)	返回数字的下舍整数，如math.floor(4.9)返回 4
# log(x)	如math.log(math.e)返回1.0, math.log(100, 10)返回2.0
# log10(x)	返回以10为基数的x的对数，如math.log10(100)返回 2.0
# max(x1, x2, ...)	返回给定参数的最大值，参数可以为序列。
# min(x1, x2, ...)	返回给定参数的最小值，参数可以为序列。
# modf(x)	返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。
# pow(x, y)	x**y 运算后的值。
# round(x[, n]) # 返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。
# 其实准确的说是保留值将保留到离上一位更近的一端。
# sqrt(x)	返回数字x的平方根。

"-------random函数-----------"
# 随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。
# Python包含以下常用随机数函数：
print(
    # 从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。
    random.choice(range(10)), random.randrange(
        1, 100, 2)  # 从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1
    , random.random()  # 随机生成下一个实数，它在[0, 1)范围内。
    , random.seed()  # 改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。
    , random.shuffle([1, 23, 1, 654, 61, 65])  # 将序列的所有元素随机排序
    , random.uniform(5, 100)  # 随机生成下一个实数，它在[x, y]范围内。
)

"----------三角函数(属于math模块)-------------"
x = y = 0.5 ** 0.5
print(
    math.acos(x)  # 返回x的反余弦弧度值。
    , math.asin(x)  # 返回x的反正弦弧度值。
    , math.atan(x)  # 返回x的反正切弧度值。
    , math.atan2(y, x)  # 返回给定的 X 及 Y 坐标值的反正切值。
    , math.cos(x)  # 返回x的弧度的余弦值。
    , math.hypot(x, y)  # 返回欧几里德范数 sqrt(x*x + y*y)。
    , math.sin(x)  # 返回的x弧度的正弦值。
    , math.tan(x)  # 返回x弧度的正切值。
    , math.degrees(x)  # 将弧度转换为角度, 如degrees(math.pi/2) ， 返回90.0
    , math.radians(x)  # 将角度转换为弧度
)

"---------------math常量------------------"
print(
    math.pi,  # 数学常量 pi（圆周率，一般以π来表示）
    math.e  # 数学常量 e，e即自然常数（自然常数）。
)
